package com.android.functionmanagement.globle;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.os.Environment;
import android.util.Log;

/**
 * 类描述:打印日志类
 * 
 * @version 1.0
 * @date 2012-5-22
 * @see
 */

public class LogGloble {
	
	//----------------------add by fmh----------------------------
	private static Boolean WRITE_LOG_TO_FILE = true;// 日志写入文件开关
	private static SimpleDateFormat LOG_FILE_NAME_FORMAT = new SimpleDateFormat("yyyyMMdd");// 日志文件格式
	private static SimpleDateFormat LOG_HEAD_DATE_FORMAT = new SimpleDateFormat("yyMMdd HH:mm:ss");// 日志的输出格式
	private static String LOG_FILE_SDCARD_DIR = Environment.getExternalStorageDirectory().getPath();// 日志文件在sdcard中的路径
	private static String LOG_FILE_NAME = "Log.txt";// 本类输出的日志文件名称
	/**
	 * 打开日志文件并写入日志
	 * 
	 * @return
	 * **/
	private static void writeLogtoFile(String mylogtype, String tag, String text) {// 新建或打开日志文件
		if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			return;
		}
		Date nowtime = new Date();
		String logFileNameHead = LOG_FILE_NAME_FORMAT.format(nowtime);
		String logText = LOG_HEAD_DATE_FORMAT.format(nowtime) + " "+ tag + " "+ text;
		File file = new File(LOG_FILE_SDCARD_DIR, logFileNameHead+ LOG_FILE_NAME);
		try {
			FileWriter fileWriter = new FileWriter(file, true);// 后面这个参数代表是不是要接上文件中原来的数据，不进行覆盖
			BufferedWriter bufWriter = new BufferedWriter(fileWriter);
			bufWriter.write(logText);
			bufWriter.newLine();
			bufWriter.close();
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 根据打印日志标识，判断是否打印日志 </p>
	 * 
	 * 级别：verbose
	 * 
	 * @param TAG
	 * @param msg
	 * @param t
	 */
	public static void v(String TAG, String msg, Throwable t) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_VERBOSE) {
				Log.v(TAG, msg, t);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：verbose
	 * 
	 * @param TAG
	 * @param msg
	 */
	public static void v(String TAG, String msg) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_VERBOSE) {
				Log.v(TAG, msg);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志 </p>
	 * 
	 * 级别：debug
	 * 
	 * @param TAG
	 * @param msg
	 * @param t
	 */
	public static void d(String TAG, String msg, Throwable t) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_DEBUG) {
				Log.d(TAG, msg, t);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：debug
	 * 
	 * @param TAG
	 * @param msg
	 */
	public static void d(String TAG, String msg) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_DEBUG) {
				if (WRITE_LOG_TO_FILE)
					writeLogtoFile(String.valueOf('d'), TAG, msg);
				Log.d(TAG, msg);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：info
	 * 
	 * @param TAG
	 * @param msg
	 */
	public static void i(String TAG, String msg) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_INFO) {
				Log.i(TAG, msg);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：info
	 * 
	 * @param TAG
	 * @param msg
	 * @param t
	 */
	public static void i(String TAG, String msg, Throwable t) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_INFO) {
				Log.i(TAG, msg, t);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：warn
	 * 
	 * @param TAG
	 * @param msg
	 */
	public static void w(String TAG, String msg) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_WARN) {
				Log.w(TAG, msg);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：warn
	 * 
	 * @param TAG
	 * @param msg
	 * @param t
	 */
	public static void w(String TAG, String msg, Throwable t) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_WARN) {
				Log.w(TAG, msg, t);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：error
	 * 
	 * @param TAG
	 * @param msg
	 */
	public static void e(String TAG, String msg) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_ERROR) {
				Log.e(TAG, msg);
			}
		}
	}

	/**
	 * 根据打印日志标识，判断是否打印日志</p>
	 * 
	 * 级别：error
	 * 
	 * @param TAG
	 * @param msg
	 * @param t
	 */
	public static void e(String TAG, String msg, Throwable t) {
		if (msg != null) {
			if (ConstantGloble.LOG_FLAG_ERROR) {
				Log.e(TAG, msg, t);
			}
		}
	}
	
}
